### Project 5 Rainbow Ambient Light **1. Description** Arduino 2812RGB LED is a programable colorful dreamy light, whose color, brightness and rhythm are adjustable. This rainbow ambient light can be used as a dynamic decoration at will. Or you may control it to "dance with music". Importantly, it can be improved as an alarm. Its built-in sensor detects the ambient surroundings to warn users by changing its color, brightness and rhythm. **2. Working Principle** ![](./media/A22.png) The data protocol adopts communication mode of single-line return-to-zero code. After the pixel is reset on power, DIN terminal receives data from the controller. The firstly arriving 24bit data will be extracted by the first pixel and be sent to the inner data register. Remaining data will be amplified by an amplification circuit and be transmitted through DOUT port to the next cascaded pixel. Being transmitted through pixels, the signal decreases 24bit each time. Besides, The pixel adopts automatic shaping and forwarding technology, insomuch that the cascade number of the pixel is only limited by the signal transmission speed. **3. Wiring Diagram** ![](./media/A23.png) **4. Test Code** ``` /* keyestudio ESP32 Inventor Learning Kit Project 5.1 Rainbow Ambient Light http://www.keyestudio.com */ //Add 2812RGB library file #include #define PIN 15 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN); //Defines the instance strip and assigns the RGB LED number pins to the library code void setup() { strip.begin(); //Activate RGB LED strip.show(); // Refresh the display } void loop() { strip.setPixelColor(0, strip.Color(255, 0, 0)); //The frist RGB LED is red strip.setPixelColor(1, strip.Color(0, 255, 0)); //The second RGB LED is green strip.setPixelColor(2, strip.Color(0, 0, 255)); //The third RGB LED is blue strip.setPixelColor(3, strip.Color(255, 255, 0)); //The fourth RGB LED is yellow strip.setPixelColor(4, strip.Color(255, 0, 255)); //The fifth RGB LED is purple strip.setPixelColor(5, strip.Color(255, 255, 255)); //The sixth RGB LED is white strip.show(); //Refresh the display delay(100); //Give a delay to save the stability of the display } ``` **5. Test Result** After uploading the code and powering on, the LED will light up in different colors. From left to right: - The first RGB LED is red - The second RGB LED is green - The third RGB LED is blue - The fourth RGB LED is yellow - The fifth RGB LED is purple - The sixth RGB LED is white ![](./media/A24.png) **6. Extended Code** ``` /* keyestudio ESP32 Inventor Learning Kit Project 5.2 Rainbow Ambient Light http://www.keyestudio.com */ //Add 2812RGB library file #include #define PIN 15 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue // Send a theater pixel chase in... theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(127, 0, 0), 50); // Red theaterChase(strip.Color( 0, 0, 127), 50); // Blue rainbow(20); rainbowCycle(20); theaterChaseRainbow(50); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i